package org.znxs.znagent_s.rag.tools;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IORuntimeException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.znxs.znagent_s.constant.FileConstant;

import java.io.File;
import java.util.List;

/**
 * 适用于 ai—agent 文件读取 写入工具类
 */
@Slf4j
public class FileOperationTool {

    private static final String FILE_SAVE_DIR = FileConstant.FILE_SAVE_DIR + "/file";

    @Tool(description = "从文件中读取内容")
    public String readFile(@ToolParam(description = "文件名称（含后缀）") String fileName) {
        // 读取文件逻辑
        // 判断文件是否存在
        String filepath = FILE_SAVE_DIR + "/" + fileName;
        if (FileUtil.isEmpty(new File(filepath))) {
            log.warn("文件不存在");
            throw new RuntimeException("读取文件不存在");
        }
        // 文件存在 使用hutools工具类进行读取内容
        String context;
        try {
            context = FileUtil.readUtf8String(filepath);
        } catch (IORuntimeException e) {
            throw new RuntimeException("读取文件出现问题", e);
        }
        log.info("文件读取成功");
        return context;
    }

    @Tool(description = "保存内容到文件中,兼容各种文件")
    public String writeFile(@ToolParam(description = "写入的文件名称（含后缀）") String fileName, @ToolParam(description = "写入的文本内容") String context) {
        // 写入逻辑
        String filepath = FILE_SAVE_DIR + "/" + fileName;
        try {
            FileUtil.mkdir(FILE_SAVE_DIR);
            FileUtil.writeUtf8String(context, filepath);
            log.info("文件写入成功：\n{}", context);
            return "文件路径：" + filepath;
        } catch (IORuntimeException e) {
            log.error("文件写入出现问题", e);
            throw new RuntimeException("写入文件出现问题", e);
        }
    }

}
